package day01;

/*
Java 基本数据类型8个：
   整数：byte（1个字节，-128~127）、short（2个字节 -65536~65535）、
         int（4个字节）、long（8个字节）
   浮点：float（4个字节）、double（8个字节）
   布尔：boolean(1个字节)
   字符：char（2个字节），底层是一个整数，比如 中，用Unicode编码后是数字。

   除了基本类型之外，其他都是引用类型：数组、类（String）、接口。

   python中数据类型：整数、浮点数、布尔、列表、元组、集合、字典、字符串
 */
public class Demo03 {
    public static void main(String[] args) {
        String name = "Tom"; // String不是基本类型，是面向对象的

        int n = 10; // 不是面向对象的
        byte b1 = 127;
        short s1 = 10000;
        int i1 = 1000000000;
        // 数字默认是int类型的，
        // 如果超过了int类型的范围，需要在数字后面加L/l，最好大写
        long long1 = 1000000000000L;

        // 3.14 一个小数，默认是double类型的，赋值给float类型会报错。
        // float类型的数字，在后面加F/f
        float f1 = 3.14f;
        double d1 = 3.14;

        boolean bool = true;
        bool = false;

        char c1 = 'A';
        System.out.println(c1);
        char c2 = '中'; // 20013
        System.out.println(c2);
        System.out.println(c1 + c2); // char做加法，对应的是编码后的数字做加法

        char c3 = '\n'; // 转义字符，\n 换行符
        System.out.println("hello" + c3 + "world");
        System.out.println(c2 + 0);

        char c4 = '\u4E2D'; // 4E2D 转十进制为：20013，对应字符：中
        System.out.println(c4);

        /*
        类型转换：byte类型的值赋值给int类型的变量。
        自动转换：容量小的类型转换成容量大的类型。
                 小瓶子中的水倒入大瓶子中。数据不会有问题，只是浪费空间。

        强制转换：容量大的类型向容量小的类型转换。
                 大瓶子中的水倒入小瓶子。可能导致数据溢出，或者精度丢失。

        byte、char、short ---> int ---> long ----> float -----> double
        boolean类型不能转成其他类型，  byte、char、short 不能相互转换。
         */
        char c5 = 20013; //
        int n1 = c5 + 10; // c5 char自动转成int，再跟10运算。
        char c6 = (char) n1; // () 强转运算符，小括号里面是强转的类型
        System.out.println(c6);

        long long2 = 9876543210L; // 8 二进制
        n1 = (int) long2; // 4
        System.out.println(long2 + ",long转成int后：" + n1);

        double d2 = 3.14;
        n1 = (int) d2;
        System.out.println(d2 + ", double转成int后：" + n1);

    }
}
